From 521d93a57624315d085eefc61592fc5bc9834606 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Thu, 20 Mar 2014 13:05:52 -0700 Subject: [PATCH] Clean up dynamic option checks --- src/bin/cargo-read-manifest.rs | 58 ++++++++++++++-------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/src/bin/cargo-read-manifest.rs b/src/bin/cargo-read-manifest.rs index 5e99cf56f..17487f48a 100644 --- a/src/bin/cargo-read-manifest.rs +++ b/src/bin/cargo-read-manifest.rs @@ -81,43 +81,31 @@ fn execute() -> CargoResult<()> { } fn normalize(lib: &Option<~[SerializedLibTarget]>, bin: &Option<~[SerializedExecTarget]>) -> (~[LibTarget], ~[ExecTarget]) { - if lib.is_some() && bin.is_some() { - let l = lib.clone().unwrap()[0]; - let mut path = l.path.clone(); + fn lib_targets(libs: &[SerializedLibTarget]) -> ~[LibTarget] { + let l = &lib[0]; + let path = l.path.clone().unwrap_or_else(|| format!("src/{}.rs", l.name)); + ~[LibTarget{ path: path, name: l.name.clone() }] + } - if path.is_none() { - path = Some(format!("src/{}.rs", l.name)); - } + fn bin_targets(bins: &[SerializedExecTarget], default: |&SerializedExecTarget| -> ~str) -> ~[ExecTarget] { + bins.map(|bin| { + let path = bin.path.clone().unwrap_or_else(|| default(bin)); + ExecTarget{ path: path, name: bin.name.clone() } + }) + } - let b = bin.get_ref().map(|b_ref| { - let b = b_ref.clone(); - let mut path = b.path.clone(); - if path.is_none() { - path = Some(format!("src/bin/{}.rs", b.name.clone())); - } - ExecTarget{ path: path.unwrap(), name: b.name } - }); - (~[LibTarget{ path: path.unwrap(), name: l.name }], b) - } else if lib.is_some() { - let l = lib.clone().unwrap()[0]; - let mut path = l.path.clone(); - - if path.is_none() { - path = Some(format!("src/{}.rs", l.name)); + match (lib, bin) { + (&Some(ref libs), &Some(ref bins)) => { + (lib_targets(libs.as_slice()), bin_targets(bins.as_slice(), |bin| format!("src/bin/{}.rs", bin.name))) + }, + (&Some(ref libs), &None) => { + (lib_targets(libs.as_slice()), ~[]) + }, + (&None, &Some(ref bins)) => { + (~[], bin_targets(bins.as_slice(), |bin| format!("src/{}.rs", bin.name))) + }, + (&None, &None) => { + (~[], ~[]) } - - (~[LibTarget{ path: path.unwrap(), name: l.name }], ~[]) - } else if bin.is_some() { - let b = bin.get_ref().map(|b_ref| { - let b = b_ref.clone(); - let mut path = b.path.clone(); - if path.is_none() { - path = Some(format!("src/{}.rs", b.name.clone())); - } - ExecTarget{ path: path.unwrap(), name: b.name } - }); - (~[], b) - } else { - (~[], ~[]) } } -- 2.30.2